package com.evil.account.api;

import com.evil.account.config.FeignErrorDecoder;
import com.evil.account.pojo.entity.Role;
import com.evil.common.account.dto.role.*;
import com.evil.common.core.constant.ServiceNameConstant;
import com.evil.common.core.dto.FindByIdsReqDTO;
import com.evil.common.core.entity.QueryModel;
import com.github.pagehelper.PageInfo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 角色接口
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
@FeignClient(name = ServiceNameConstant.ACCOUNT_SERVICE, configuration = {FeignErrorDecoder.class})
public interface RemoteRoleService {

    /**
     * 通过角色id查询角色信息
     *
     * @param roleId 角色id
     * @return role
     */
    @PostMapping("/remote/find/role/is-exist-by-id")
    Optional<Role> isExistById(@RequestParam("id") Long roleId);

    /**
     * 通过角色ids查询角色信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return role
     */
    @PostMapping("/remote/find/role/by-ids")
    List<Role> findByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过角色ids查询角色基础信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return role
     */
    @PostMapping("/remote/find/role/by-base-ids")
    List<RoleBaseRespDTO> findBaseByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过角色ids查询角色信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return role
     */
    @PostMapping("/remote/find/role/by-map-ids")
    Map<Long, Role> findMapByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 通过角色ids查询角色基础信息
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return role
     */
    @PostMapping("/remote/find/role/by-base-map-ids")
    Map<Long, RoleBaseRespDTO> findBaseMapByIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 查询职务列表
     *
     * @param rolePageReqDTO rolePageReqDTO
     * @return List
     */
    @PostMapping("/remote/role/bases")
    List<RoleBaseRespDTO> roleBases(@Validated @RequestBody RolePageReqDTO rolePageReqDTO);

    /**
     * 新增角色
     *
     * @param addRoleReqDTO addRoleReqDTO
     */
    @PostMapping("/remote/role/add")
    void add(@Validated @RequestBody AddRoleReqDTO addRoleReqDTO);

    /**
     * 编辑角色
     *
     * @param modifyRoleReqDTO modifyRoleReqDTO
     */
    @PostMapping("/remote/role/modify")
    void modify(@Validated @RequestBody ModifyRoleReqDTO modifyRoleReqDTO);

    /**
     * 获取角色列表
     *
     * @param queryModel queryModel
     * @return PageInfo
     */
    @PostMapping("/remote/role/list")
    PageInfo<RolePageRespDTO> page(@Validated @RequestBody QueryModel<RolePageReqDTO> queryModel);

    /**
     * 删除角色
     *
     * @param deleteRoleReqDTO deleteRoleReqDTO
     */
    @PostMapping("/remote/role/delete")
    void delete(@Validated @RequestBody DeleteRoleReqDTO deleteRoleReqDTO);

    /**
     * 禁用||启用 角色
     *
     * @param enableRoleReqDTO enableRoleReqDTO
     */
    @PostMapping("/remote/role/is/enable")
    void isEnable(@Validated @RequestBody EnableRoleReqDTO enableRoleReqDTO);
}
